perm filename L1[CH2,ALS] blob sn#283553 filedate 1977-05-27 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00006 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	LINEAR L1 L2 L3 L4 L5 L5A L7 L8 L9 L9A L10 L10A L10B L10C L12 L14 L14N
C00008 00003	L21A L21 L22 L22A AC ACZ AC1 AC3 AC3A AC2 L25B L25BN L25C
C00012 00004	TRJOUT L31 L32 L34 L34Z L34A L34B L34C L35 L35B L35BN
C00015 00005	C2P C3P C4P C5 C2N C3N C4N C6
C00017 00006	CORCOM CORADD WEIGH1 WEIGH2 WEIGH3 WEIGHT LMSKW LRNPDL
C00018 ENDMK
CāŠ—;
;LINEAR L1 L2 L3 L4 L5 L5A L7 L8 L9 L9A L10 L10A L10B L10C L12 L14 L14N

;MACRO USED IN L25B
DEFINE	TAB	(T)	<;TABLE COEF. MACRO
	SETZ	X1,
	MOVE	Z,T(X1)
	PUSHJ	PDP,TRJOUT
	ADDI	X1,1
	CAIGE	X1,5
	JRST	.-4>

LINEAR:	MOVE	A,[XWD -1,LRNPDL]
	SKIPN	LFLAG1
	JRST	L1
	SKIPN	RFLAG
	JRST	.+4
	SETZM	RFLAG
	SETOM	LFLAG5
	SETOM	LFLAG6
	SKIPN	LFLAG5
	JRST	L1
	SETZ	X4,
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /LINEAR TERM COEFFICIENTS/]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
L1:	POP	A,K		;GET TABLE START
	JUMPE	K,L21A		;LAST AT THIS LEVEL
	POP	A,Q		;GET RESULT START
	MOVEI	P,3		;PHASE COUNTER
	SKIPN	LFLAG5
	JRST	L2
	REPEAT	4,<
	REPEAT	3,<	XCT	TLIST(X4)
	ADDI	X4,1
	PUSHJ	PDP,PRINT>
	PUSHJ	PDP,TERPRI
	ADDI	X4,17>
	SUBI	X4,105
L2:	MOVEI	U3,26		;ENTRIES PER TABLE
	MOVNM	U3,U3S#
	HRRM	K,L5		;FIX UP ADDRESSES
	HRRM	K,L5A
	HRRM	K,AC
	HRRM	K,AC1
	HRRM	K,L10
	HRRM	K,L10A
	HRRM	Q,L12
	HRRM	Q,C3P
	HRRM	Q,C3N
	HRRM	Q,AC2
	HRRM	Q,C6
	HRRM	Q,C5
	MOVEI	X1,12
	SETZM	TRMA(X1)	;CLEAR TABLES
	SOJGE	X1,.-1
	MOVEI	X1,2
L3:	MOVEI	X2,2
L4:	MOVEI	X3,4
L5:	MOVE	Z,(U3)
	TDNN	Z,[700000,,700000]
	JRST	.+4
	LSH	Z,-2		;DIVIDE TO PREVENT OVERFLOW
	AND	Z,[77777,,77777]
L5A:	MOVEM	Z,(U3)
	ADDM	Z,TRMA(X1)
	ADDM	Z,TRMB(X2)
	ADDM	Z,TRMC(X3)
	SUBI	U3,1
	SOJGE	X3,L5
	SOJGE	X2,L4
	SOJGE	X1,L3
	SKIPN	LFLAG1
	JRST	.+10
	MOVE	Z,TRMA
	ADD	Z,TRMA+2
	ADDB	Z,TRMA+1	;CAN USE TEMPORARILY
	LSH	Z,-22
	ADD	Z,TRMA+1
	ANDI	Z,777777
	MOVEM	Z,TRMAT#
	SETZM	TRMA+1		;REQUIRED BY SYMETRY
	SETZM	TRMB+1
	SETZM	TRMC+2
	MOVS	Z,TRMA
	ADDB	Z,TRMA+2
	MOVSM	Z,TRMA		;THIS ADDS THESE CORRECTLY
	SKIPE	LFLAG1		;DO WE PRINT
	PUSHJ	PDP,LRJOUT
	MOVS	Z,TRMB
	ADDB	Z,TRMB+2
	MOVSM	Z,TRMB
	SKIPE	LFLAG1
	PUSHJ	PDP,LRJOUT
	MOVS	Z,TRMC
	ADDB	Z,TRMC+4
	MOVSM	Z,TRMC
	SKIPE	LFLAG1
	PUSHJ	PDP,LRJOUT
	MOVS	Z,TRMC+1
	ADDB	Z,TRMC+3
	MOVSM	Z,TRMC+1
	SKIPE	LFLAG1
	PUSHJ	PDP,LRJOUT
	MOVEI	U3,26
	SETZM	CPOS#		;COUNT OF POSITIVE ENTRIES
	SETZM	CNEG#		;COUNT OF NEGATIVE ENTRIES
	MOVEI	X1,2
L7:	MOVEI	X2,2
L8:	MOVEI	X3,4
L9:	SETZ	Z,
	SKIPN	LFLAG2
	JRST	L10
	ADD	Z,TRMA(X1)
	ADD	Z,TRMB(X2)
	ADD	Z,TRMC(X3)
	TRNN	Z,400000	;TEST FOR RIGHT OVERFLOW
	TLNE	Z,200000	;TEST FOR LEFT OVERFLOW
	PUSHJ	PDP,LZ		;REPORT TROUBLE
L9A:	ASH	-6		;DIVIDE BY 64
	MOVE	U1,WEIGHT
	AND	Z,LMSKW(U1)		;PURGE UNDERFLOW
L10:	ADD	Z,(U3)
	SKIPN	LFLAG7
	JRST	L10C
	MOVN	U1,U3
L10A:	MOVS	U2,(U1)
L10B:	LSH	U2,-1
	MOVE	U1,WEIGH1
	AND	U2,LMSKW(U1)
	ADD	Z,U2
L10C:	HLRZ	U1,Z
	HRRZ	U2,Z
	JUMPE	Z,L12
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	ASH	U1,14		;MULTIPLY BY 4096
	MOVEM	X2,X2S
	IDIV	U1,U2
	MOVE	X2,X2S
	SKIPLE	U1
	AOS	CPOS		;COUNT POS ENTRIES
	SKIPGE	U1
	AOS	CNEG		;COUNT NEG ENTRIES
	SKIPE	U1		;DO NOT BOTHER WITH ZERO ENTRIES
	ADD	U1,CORADD
L12:	MOVEM	U1,(U3)
	SUBI	U3,1
	SOJGE	X3,L9
	SOJGE	X2,L8
	SOJGE	X1,L7
	MOVE	X5,CPOS		;ENTRIES
	LSH	X5,-1		;DIVIDE BY 2
	MOVEM	X5,CPOS		;ENTRIES PER BUCKET
	ADDI	X5,1		;TAPER SIZES
	MOVEI	U5,2		;LARGEST QUANTUM
	SETZB	U1,U2		;SAFETY MEASURE
L14:	MOVEI	U3,26		;TO INDEX TABLE
	PUSHJ	PDP,C2P		;FIND NEXT TO FIX
	MOVE	X5,CPOS		;RESET ENTRIES
	SUBI	X5,3		;TAPER,REMEMBER
	SOJGE	U5,L14
	MOVE	X5,CNEG
	LSH	X5,-1
	MOVEM	X5,CNEG
	ADDI	X5,1
	MOVEI	U5,2
	SETZB	U1,U2
L14N:	MOVEI	U3,26
	PUSHJ	PDP,C2N
	MOVE	X5,CNEG
	SUBI	X5,3		;TAPER
	SOJGE	U5,L14N
	SKIPE	LFLAG5
	PUSHJ	PDP,TERPRI
	ADDI	K,SIGSIZ		;FOR NEXT PHASE
	ADDI	Q,SIGSIZ
	SOJGE	P,L2		;COUNT PHASES
	SKIPN	LFLAG5
	JRST	L1
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
	JRST	L1		;TO NEXT TABLE
;L21A L21 L22 L22A AC ACZ AC1 AC3 AC3A AC2 L25B L25BN L25C

L21A:	SKIPN	LFLAGT
	JRST	L21
	PUSHJ	PDP,TERPRI
	MOVEI	U1,[ASCIZ /FIRST-LEVEL TABLE COEF./]
	PUSHJ	PDP,PRINT
	PUSHJ	PDP,TERPRI
	PUSHJ	PDP,TERPRI
L21:	POP	A,K
	SKIPE	LFLAG6
	SETZM	LFLAG5
	JUMPLE	K,L31		;LAST AT THIS LEVEL
	POP	A,Q
	JUMPLE	Q,L31
	MOVEI	P,3		;T0 COUNT PHASES
L22:	SKIPN	LFLAGT
	JRST	L22A
	MOVEI	X1,16
	SETZM	TABA(X1)
	SOJGE	X1,.-1
	MOVEI	X1,4
	MOVEI	X2,4
	MOVEI	X3,4
L22A:	SETZM	CPOS
	SETZM	CNEG
	HRRM	K,AC
	HRRM	K,ACZ
	HRRM	K,AC1
	HRRM	Q,AC2
	HRRM	Q,C3P
	HRRM	Q,C3N
	HRRM	Q,C6
	HRRM	Q,C5
	MOVEI	U3,76		;COUNT ENTRIES
	MOVNM	U3,U3S
AC:	MOVE	Z,(U3)
	TDNN	Z,[200000200000]
	JRST	.+4
	LSH	Z,-1
	AND	Z,[177777177777]
ACZ:	MOVEM	Z,(U3)
	SKIPN	LFLAGT
	JRST	.+11
	ADDM	Z,TABA(X1)
	ADDM	Z,TABB(X2)
	ADDM	Z,TABC(X3)
	SOJGE	X3,.+5
	SOJGE	X2,.+3
	SUBI	X1,1
	MOVEI	X2,4
	MOVEI	X3,4
	SKIPN	LFLAG8
	JRST	AC3A
	MOVN	U1,U3
AC1:	MOVS	U2,(U1)
AC3:	LSH	U2,-1
	MOVE	U1,WEIGH2
	AND	U2,LMSKW(U1)
	ADD	Z,U2
AC3A:	HLRZ	U1,Z
	HRRZ	U2,Z
	JUMPE	Z,AC2
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	ASH	U1,14		;PLENTY OF SPREAD
	MOVEM	X2,X2SAC#
	IDIV	U1,U2
	MOVE	X2,X2SAC
	SKIPLE	U1
	AOS	CPOS
	SKIPGE	U1
	AOS	CNEG
	SKIPE	U1
	ADD	U1,CORADD
AC2:	MOVEM	U1,(U3)
	SUBI	U3,1
	CAML	U3,U3S
	JRST	AC
	MOVE	X5,CPOS
	IDIVI	X5,7
	ADDI	X5,3		;MAKE OUTSIDE BUCKETS LARGER
	MOVEM	X5,CPOS
	ADDI	X5,1
	MOVEI	U5,7
	SETZB	U1,U2		;SAFETY MEASURE
L25B:	MOVEI	U3,76
	PUSHJ	PDP,C2P		;FIND LARGEST
	SOS	CPOS		;TO TAPER SIZES
	MOVE	X5,CPOS		;RESET ENTRIES
	SOJGE	U5,L25B
	MOVE	X5,CNEG
	IDIVI	X5,7
	ADDI	X5,3		;OUTSIDE BUCKETS LARGER
	MOVEM	X5,CNEG
	ADDI	X5,1
	MOVEI	U5,7
	SETZB	U1,U2
L25BN:	MOVEI	U3,76
	PUSHJ	PDP,C2N
	SOS	CNEG		;TO TAPER SIZES
	MOVE	X5,CNEG
	SOJGE	U5,L25BN
	SKIPN	LFLAGT
	JRST	L25C
	MOVEM	X1,X1SL25#
	TAB	TABA
	MOVEI	U1,[ASCIZ /   /]
	PUSHJ	PDP,PRINT
	TAB	TABB
	MOVEI	U1,[ASCIZ /   /]
	PUSHJ	PDP,PRINT
	TAB	TABC
	MOVE	X1,X1SL25
	PUSHJ	PDP,TERPRI
L25C:	ADDI	K,SIGSIZ
	ADDI	Q,SIGSIZ
	SOJGE	P,L22		;TO NEXT PHASE
	SKIPE	LFLAGT
	PUSHJ	PDP,TERPRI
	JRST	L21		;TO NEXT TABLE
;TRJOUT L31 L32 L34 L34Z L34A L34B L34C L35 L35B L35BN

TRJOUT:	HLRZ	U1,Z
	HRRZ	U2,Z
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	MOVEM	X1,X1STJ#
	MOVEM	X2,X2STJ#
	IMULI	U1,310
	IDIV	U1,U2
	TRNE	U1,1
	ADDI	U1,2
	ASH	U1,-1
	PUSHJ	PDP,RJOUT1
	MOVE	X1,X1STJ
	MOVE	X2,X2STJ
	POPJ	PDP,

L31:	MOVEI	K,SIGLF		;START THIRD LEVEL
	MOVEI	Q,SIGTF
	MOVEI	P,3
L32:	HRRM	K,L34
	HRRM	K,L34Z
	HRRM	K,L34A
	HRRM	Q,L35
	HRRM	Q,C3P
	HRRM	Q,C3N
	HRRM	Q,C5
	HRRM	Q,C6
	MOVEI	U3,160
	MOVNM	U3,U3S
	SETZM	CPOS
	SETZM	CNEG
L34:	MOVE	Z,(U3)
	TDNN	Z,[200000200000]
	JRST	.+4
	LSH	Z,-1
	AND	Z,[177777177777]
L34Z:	MOVEM	Z,(U3)
	SKIPN	LFLAG9
	JRST	L34C
	MOVN	U1,U3
L34A:	MOVS	U2,(U1)
L34B:	LSH	U2,-1
	MOVE	U1,WEIGH3
	AND	U2,LMSKW(U1)
	ADD	Z,U2
L34C:	HLRZ	U1,Z
	HLRZ	U1,Z
	JUMPE	Z,L35
	HRRZ	U2,Z
	SUB	U1,U2
	LSH	U2,1
	ADD	U2,U1
	CAIGE	U2,10
	SETZ	U1,
	ASH	U1,14		;MULTIPLY BY 4096
	IDIV	U1,U2
	SKIPLE	U1
	AOS	CPOS
	SKIPGE	U1
	AOS	CNEG
	SKIPE	U1
	ADD	U1,CORADD
L35:	MOVEM	U1,(U3)
	SUBI	U3,1		;TO NEXT PHASE
	CAML	U3,U3S
	JRST	L34
	SETZ	X5,
	MOVE	U5,CPOS
	SETZB	U1,U2
L35B:	MOVEI	U3,160
	PUSHJ	PDP,C2P
	SETZ	X5,
	SOJGE	U5,L35B
	SETZ	X5,
	MOVE	U5,CNEG
L35BN:	MOVEI	U3,160
	PUSHJ	PDP,C2N
	SETZ	X5,
	SOJGE	U5,L35BN
	ADDI	K,SIGSIZ
	ADDI	Q,SIGSIZ
	SOJGE	P,L32
	SETZM	LFLAGT		;TERMINATE F COMMAND
	POPJ	PDP,
;C2P C3P C4P C5 C2N C3N C4N C6

C2P:	MOVEI	Z,10001		;A LARGE NO.
	MOVNM	Z,LARGE#
C3P:	MOVE	Z,(U3)
	CAMGE	Z,CORCOM
	JRST	C4P		;ALREADY PROCESSED
	SUB	Z,CORADD
	JUMPLE	Z,C4P
	CAMG	Z,LARGE
	JRST	.+3
	MOVEM	Z,LARGE		;SAVE IF LARGER
	MOVE	U1,U3		;SAVE INDEX
C4P:	SUBI	U3,1
	CAML	U3,U3S
	JRST	C3P
	SKIPL	LARGE
C5:	MOVEM	U5,(U1)		;QUANTIZE
	SOSGE	X5
	POPJ	PDP,
	SOS	(PDP)
	SOS	(PDP)
	POPJ	PDP,

C2N:	MOVEI	Z,10001		;A LARGE NO.
	MOVEM	Z,SMALL#
C3N:	MOVE	Z,(U3)
	CAMGE	Z,CORCOM
	JRST	C4N		;ALREADY PROCESSED
	SUB	Z,CORADD
	JUMPGE	Z,C4N
	CAML	Z,SMALL
	JRST	.+3
	MOVEM	Z,SMALL		;SAVE IF SMALLER 
	MOVE	U2,U3		;SAVE INDEX
C4N:	SUBI	U3,1
	CAML	U3,U3S
	JRST	C3N
	SKIPG	SMALL
C6:	MOVNM	U5,(U2)		;QUANTIZE
	SOSGE	X5
	POPJ	PDP,
	SOS	(PDP)
	SOS	(PDP)
	POPJ	PDP,
;CORCOM CORADD WEIGH1 WEIGH2 WEIGH3 WEIGHT LMSKW LRNPDL

CORCOM:	300000000000
CORADD:	377000000000

WEIGH1:	1
WEIGH2:	1
WEIGH3:	1
WEIGHT:	6
LMSKW:	777777777777
	377777377777
	177777177777
	077777077777
	037777037777
	017777017000
	007777007777
	003777003777
	001777001777
	000777000777
	000377000377
	000177000177
	000077000077
	000037000037
	000017000017
	000007000007
	000003000003
	000001000001
	000000000000
	Z
	Z
	SIGT22
	SIGL22
	SIGT21
	SIGL21
	Z
	SIGT16
	SIGL16
	SIGT15
	SIGL15
	SIGT14
	SIGL14
	SIGT13
	SIGL13
	SIGT12
	SIGL12
	SIGT11
LRNPDL:	SIGL11